<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge" >
  <link rel="dns-prefetch" href="https://ZhenshengLee.github.io">
  <title>catkin build system | 哈骑士的博客</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="[TOC]
前言
是基于CMake，使用一系列CMake 宏制作而成的ROS构造系统">
<meta property="og:type" content="article">
<meta property="og:title" content="catkin build system">
<meta property="og:url" content="https://ZhenshengLee.github.io/2016/08/16/160816-catkin-build-system/index.html">
<meta property="og:site_name" content="哈骑士的博客">
<meta property="og:description" content="[TOC]
前言
是基于CMake，使用一系列CMake 宏制作而成的ROS构造系统">
<meta property="og:updated_time" content="2017-01-02T15:41:23.817Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="catkin build system">
<meta name="twitter:description" content="[TOC]
前言
是基于CMake，使用一系列CMake 宏制作而成的ROS构造系统">
  
    <link rel="alternative" href="/atom.xml" title="哈骑士的博客" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  <link rel="stylesheet" type="text/css" href="/main.68ab53.css">
  <style type="text/css">
  
    #container.show {
      background: linear-gradient(200deg,#a0cfe4,#e8c37e);
    }
  </style>
  

  

</head>

<body>
  <div id="container" q-class="show:isCtnShow">
    <canvas id="anm-canvas" class="anm-canvas"></canvas>
    <div class="left-col" q-class="show:isShow">
      
<div class="overlay" style="background: #4d4d4d"></div>
<div class="intrude-less">
	<header id="header" class="inner">
		<a href="/" class="profilepic">
			<img src="http://7xvunf.com1.z0.glb.clouddn.com/%E5%85%B6%E4%BB%96100.jpg" class="js-avatar">
		</a>
		<hgroup>
		  <h1 class="header-author"><a href="/">黎振胜</a></h1>
		</hgroup>
		
		<p class="header-subtitle">将科技固化为产品——机器人软件开发</p>
		

		<nav class="header-menu">
			<ul>
			
				<li><a href="/">主页</a></li>
	        
				<li><a href="/tags/机器人/">机器人</a></li>
	        
				<li><a href="/tags/嵌入式/">嵌入式</a></li>
	        
				<li><a href="/tags/其他/">其他</a></li>
	        
			</ul>
		</nav>
		<nav class="header-smart-menu">
    		
    			
    			<a q-on="click: openSlider(e, 'innerArchive')" href="javascript:void(0)">所有文章</a>
    			
            
    			
            
    			
    			<a q-on="click: openSlider(e, 'aboutme')" href="javascript:void(0)">关于我</a>
    			
            
		</nav>
		<nav class="header-nav">
			<div class="social">
				
					<a class="github" target="_blank" href="https://github.com/ZhenshengLee" title="github"><i class="icon-github"></i></a>
		        
					<a class="mail" target="_blank" href="mailto://lzs_1993@qq.com" title="mail"><i class="icon-mail"></i></a>
		        
					<a class="linkedin" target="_blank" href="https://cn.linkedin.com/in/zhenshengli" title="linkedin"><i class="icon-linkedin"></i></a>
		        
			</div>
		</nav>
	</header>		
</div>

    </div>
    <div class="mid-col" q-class="show:isShow,hide:isShow|isFalse">
      
<nav id="mobile-nav">
  	<div class="overlay js-overlay" style="background: #4d4d4d"></div>
	<div class="btnctn js-mobile-btnctn">
  		<div class="slider-trigger list" q-on="click: openSlider(e)"><i class="icon icon-sort"></i></div>
	</div>
	<div class="intrude-less">
		<header id="header" class="inner">
			<div class="profilepic">
				<img src="http://7xvunf.com1.z0.glb.clouddn.com/%E5%85%B6%E4%BB%96100.jpg" class="js-avatar">
			</div>
			<hgroup>
			  <h1 class="header-author js-header-author">黎振胜</h1>
			</hgroup>
			
			<p class="header-subtitle"><i class="icon icon-quo-left"></i>将科技固化为产品——机器人软件开发<i class="icon icon-quo-right"></i></p>
			
			
			
				
			
				
			
				
			
				
			
			
			
			<nav class="header-nav">
				<div class="social">
					
						<a class="github" target="_blank" href="https://github.com/ZhenshengLee" title="github"><i class="icon-github"></i></a>
			        
						<a class="mail" target="_blank" href="mailto://lzs_1993@qq.com" title="mail"><i class="icon-mail"></i></a>
			        
						<a class="linkedin" target="_blank" href="https://cn.linkedin.com/in/zhenshengli" title="linkedin"><i class="icon-linkedin"></i></a>
			        
				</div>
			</nav>

			<nav class="header-menu js-header-menu">
				<ul style="width: 70%">
				
				
					<li style="width: 25%"><a href="/">主页</a></li>
		        
					<li style="width: 25%"><a href="/tags/机器人/">机器人</a></li>
		        
					<li style="width: 25%"><a href="/tags/嵌入式/">嵌入式</a></li>
		        
					<li style="width: 25%"><a href="/tags/其他/">其他</a></li>
		        
				</ul>
			</nav>
		</header>				
	</div>
	<div class="mobile-mask" style="display:none" q-show="isShow"></div>
</nav>

      <div id="wrapper" class="body-wrap">
        <div class="menu-l">
          <div class="canvas-wrap">
            <canvas data-colors="#eaeaea" data-sectionHeight="100" data-contentId="js-content" id="myCanvas1" class="anm-canvas"></canvas>
          </div>
          <div id="js-content" class="content-ll">
            <article id="post-160816-catkin-build-system" class="article article-type-post " itemscope itemprop="blogPost">
  <div class="article-inner">
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      catkin build system
    </h1>
  

        
        <a href="/2016/08/16/160816-catkin-build-system/" class="archive-article-date">
  	<time datetime="2016-08-16T08:47:24.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2016-08-16</time>
</a>
        
      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>[TOC]</p>
<h3 id="&#x524D;&#x8A00;"><a href="#&#x524D;&#x8A00;" class="headerlink" title="&#x524D;&#x8A00;"></a>&#x524D;&#x8A00;</h3><ul>
<li>&#x662F;&#x57FA;&#x4E8E;CMake&#xFF0C;&#x4F7F;&#x7528;&#x4E00;&#x7CFB;&#x5217;CMake &#x5B8F;&#x5236;&#x4F5C;&#x800C;&#x6210;&#x7684;ROS&#x6784;&#x9020;&#x7CFB;&#x7EDF;</li>
</ul>
<a id="more"></a>
<h2 id="&#x76EE;&#x5F55;"><a href="#&#x76EE;&#x5F55;" class="headerlink" title="&#x76EE;&#x5F55;"></a>&#x76EE;&#x5F55;</h2><!-- toc -->
<ul>
<li><a href="#&#x53C2;&#x8003;">&#x53C2;&#x8003;</a></li>
<li><a href="#cmakelistshttpwikirosorgcatkincmakeliststxt">CMakeLists</a><ul>
<li><a href="#&#x7EFC;&#x8FF0;">&#x7EFC;&#x8FF0;</a></li>
<li><a href="#&#x603B;&#x4F53;&#x7ED3;&#x6784;&#x4E25;&#x683C;&#x6309;&#x7167;&#x987A;&#x5E8F;">&#x603B;&#x4F53;&#x7ED3;&#x6784;&#xFF08;&#x4E25;&#x683C;&#x6309;&#x7167;&#x987A;&#x5E8F;&#xFF09;</a></li>
<li><a href="#find_package&#x601D;&#x60F3;">find_package()&#x601D;&#x60F3;</a></li>
<li><a href="#catkin_package&#x601D;&#x60F3;">catkin_package()&#x601D;&#x60F3;</a></li>
<li><a href="#&#x5173;&#x4E8E;&#x6807;&#x7684;&#x7684;&#x6784;&#x5EFA;&#x9009;&#x9879;">&#x5173;&#x4E8E;&#x6807;&#x7684;&#x7684;&#x6784;&#x5EFA;&#x9009;&#x9879;</a></li>
<li><a href="#&#x6D88;&#x606F;&#x670D;&#x52A1;&#x548C;&#x52A8;&#x4F5C;">&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#x548C;&#x52A8;&#x4F5C;</a><ul>
<li><a href="#&#x4E00;&#x7CFB;&#x5217;&#x6CE8;&#x610F;&#x4E8B;&#x9879;&#x61D2;&#x5F97;&#x7FFB;&#x8BD1;&#x4E86;">&#x4E00;&#x7CFB;&#x5217;&#x6CE8;&#x610F;&#x4E8B;&#x9879;&#xFF08;&#x61D2;&#x5F97;&#x7FFB;&#x8BD1;&#x4E86;&#xFF09;</a></li>
</ul>
</li>
<li><a href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;">&#x5355;&#x5143;&#x6D4B;&#x8BD5;</a></li>
<li><a href="#&#x5B89;&#x88C5;&#x7565;">&#x5B89;&#x88C5;&#xFF08;&#x7565;&#xFF09;</a></li>
</ul>
</li>
<li><a href="#packagexmlhttpwikirosorgcatkinpackagexml">Package.xml</a><ul>
<li><a href="#&#x4F7F;&#x7528;xml&#x8BED;&#x8A00;&#x8BBE;&#x7F6E;&#x4F9D;&#x8D56;&#x7565;">&#x4F7F;&#x7528;XML&#x8BED;&#x8A00;&#x8BBE;&#x7F6E;&#x4F9D;&#x8D56;&#xFF08;&#x7565;&#xFF09;</a></li>
</ul>
</li>
<li><a href="#&#x4E13;&#x9898;&#x6D88;&#x606F;&#x670D;&#x52A1;&#x91CD;&#x914D;&#x7F6E;&#x7684;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;">&#x4E13;&#x9898;&#xFF1A;&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#xFF0C;&#x91CD;&#x914D;&#x7F6E;&#x7684;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;</a></li>
<li><a href="#&#x5B9E;&#x4F8B;&#x89E3;&#x51B3;zsdoor&#x6A21;&#x5757;&#x7F3A;&#x5931;&#x95EE;&#x9898;">&#x5B9E;&#x4F8B;&#xFF1A;&#x89E3;&#x51B3;zsDoor&#x6A21;&#x5757;&#x7F3A;&#x5931;&#x95EE;&#x9898;</a><ul>
<li><a href="#&#x67E5;&#x770B;stereo_wall_detection&#x7684;cmakeliststxt">&#x67E5;&#x770B;stereo_wall_detection&#x7684;CMakeLists.txt</a></li>
</ul>
</li>
</ul>
<!-- tocstop -->
<h3 id="&#x53C2;&#x8003;"><a href="#&#x53C2;&#x8003;" class="headerlink" title="&#x53C2;&#x8003;"></a>&#x53C2;&#x8003;</h3><blockquote>
<p><a href="http://docs.ros.org/api/catkin/html/" target="_blank" rel="external">Catkin Documentation</a></p>
<p><a href="http://wiki.ros.org/catkin" target="_blank" rel="external">ROS Wiki</a></p>
</blockquote>
<p>**&#x63A8;&#x8350;&#x4E00;&#x672C;&#x4E66;&#xFF1A;&#x300A;&#x6DF1;&#x5165;&#x7406;&#x89E3;&#x8F6F;&#x4EF6;&#x6784;&#x5EFA;&#x7CFB;&#x7EDF;&#x300B;</p>
<h3 id="cmakelists"><a href="#CMakeLists" class="headerlink" title="CMakeLists"></a><a href="http://wiki.ros.org/catkin/CMakeLists.txt" target="_blank" rel="external">CMakeLists</a></h3><h4 id="&#x7EFC;&#x8FF0;"><a href="#&#x7EFC;&#x8FF0;" class="headerlink" title="&#x7EFC;&#x8FF0;"></a>&#x7EFC;&#x8FF0;</h4><ul>
<li>&#x6B64;&#x6587;&#x4EF6;&#x662F;CMake &#x6784;&#x9020;&#x7CFB;&#x7EDF;&#x7684;&#x8F93;&#x5165;&#x6587;&#x4EF6;&#xFF0C;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;&#x8BB0;&#x5F55;&#x4E86;&#x4EE3;&#x7801;&#x5982;&#x4F55;&#x6784;&#x5EFA;&#x4EE5;&#x53CA;&#x5982;&#x4F55;&#x5B89;&#x88C5;&#xFF0C;catkin &#x6784;&#x5EFA;&#x7CFB;&#x7EDF;&#x57FA;&#x4E8E;CMakeLists&#xFF0C;&#x4F46;&#x662F;&#x4E5F;&#x6DFB;&#x52A0;&#x4E86;&#x989D;&#x5916;&#x7684;&#x4E0D;&#x591A;&#x7684;&#x7EA6;&#x675F;</li>
</ul>
<h4 id="&#x603B;&#x4F53;&#x7ED3;&#x6784;&#x4E25;&#x683C;&#x6309;&#x7167;&#x987A;&#x5E8F;"><a href="#&#x603B;&#x4F53;&#x7ED3;&#x6784;&#xFF08;&#x4E25;&#x683C;&#x6309;&#x7167;&#x987A;&#x5E8F;&#xFF09;" class="headerlink" title="&#x603B;&#x4F53;&#x7ED3;&#x6784;&#xFF08;&#x4E25;&#x683C;&#x6309;&#x7167;&#x987A;&#x5E8F;&#xFF09;"></a>&#x603B;&#x4F53;&#x7ED3;&#x6784;&#xFF08;&#x4E25;&#x683C;&#x6309;&#x7167;&#x987A;&#x5E8F;&#xFF09;</h4><ol>
<li><p>Required CMake Version (cmake_minimum_required)</p>
</li>
<li><p>Package Name (project())</p>
</li>
<li><p>Find other CMake/Catkin packages needed for build (find_package())</p>
</li>
<li><p>Message/Service/Action Generators(add_message_files(), add_service_files(), add_action_files())</p>
</li>
<li><p><strong><em>Invoke message/service/action generation (generate_messages())</em></strong></p>
</li>
<li><p><strong><em>Specify package build info export (catkin_package())</em></strong></p>
</li>
<li><p>Libraries/Executables to build (add_library()/add_executable()/target_link_libraries())</p>
</li>
<li><p><strong><em>Tests to build (catkin_add_gtest())</em></strong></p>
</li>
<li><p>Install rules (install())</p>
</li>
</ol>
<h4 id="find_package&#x601D;&#x60F3;"><a href="#find-package-&#x601D;&#x60F3;" class="headerlink" title="find_package()&#x601D;&#x60F3;"></a>find_package()&#x601D;&#x60F3;</h4><ul>
<li>CMake&#x4E2D;&#x7684;find&#x6A21;&#x5757;&#x7684;&#x4F5C;&#x7528;&#x5728;&#x4E8E;&#x81EA;&#x52A8;&#x5BFB;&#x627E;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&#x7684;&#x8F6F;&#x4EF6;&#x7EC4;&#x4EF6;&#xFF0C;&#x8FD9;&#x91CC;&#x7684;&#x7EC4;&#x4EF6;&#x6982;&#x5FF5;&#x5BF9;&#x5E94;&#x4E8E;ROS&#x4E2D;&#x7684;&#x5305;&#x7684;&#x6982;&#x5FF5;&#x3002;&#x5982;</li>
</ul>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">find_package</span>(catkin REQUIRED COMPONENTS nodelet)</span><br></pre></td></tr></table></figure>
<p><strong>&#x610F;&#x601D;&#x662F;&#xFF0C;&#x5BFB;&#x627E;catkin&#x5E93;&#x4E2D;&#x7684;nodelet&#x7EC4;&#x4EF6;*</strong>&#xFF0C;<strong>&#x5728;&#x8FD9;&#x4E2A;&#x8BED;&#x53E5;&#x4E2D;&#x4E0D;&#x80FD;&#x6DFB;&#x52A0;&#x8FD0;&#x884C;&#x65F6;&#x4F9D;&#x8D56;*</strong></p>
<ul>
<li>&#x95EE;&#x9898;&#x6765;&#x4E86;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;Catkin&#x662F;&#x4E00;&#x4E2A;&#x5927;&#x5E93;&#xFF0C;ROS&#x5305;&#x662F;&#x4E00;&#x4E2A;&#x7EC4;&#x4EF6;&#x5462;&#xFF1F;&#x5176;&#x5B9E;&#x5B98;&#x65B9;&#x6587;&#x6863;&#x8BF4;&#x4E86;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x53EF;&#x4EE5;&#x8FD9;&#x4E48;&#x5199;</li>
</ul>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">find_package</span>(catkin REQUIRED);<span class="keyword">find_package</span>(nodelet REQUIRED)</span><br></pre></td></tr></table></figure>
<p>&#xFF0C;&#x56E0;&#x4E3A;&#x4F7F;&#x7528;catkin&#x7F16;&#x8BD1;&#xFF0C;&#x5FC5;&#x987B;&#x5305;&#x542B;catkin&#x5305;&#xFF0C;&#x7136;&#x540E;&#x4F60;&#x518D;&#x5305;&#x542B;nodelet&#x5305;&#xFF0C;&#x4F46;&#x662F;&#x8FD9;&#x6837;&#x4E5F;&#x592A;&#x4E0D;&#x65B9;&#x4FBF;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#x539F;&#x56E0;&#x5C31;&#x662F;&#x8981;&#x65B9;&#x4FBF;&#xFF0C;&#x5F53;&#x7136;&#x4E5F;&#x4E0D;&#x662F;&#x65B9;&#x4FBF;&#x8FD9;&#x4E48;&#x4E00;&#x70B9;&#x70B9;&#xFF0C;&#x8FD8;&#x6709;&#x5173;&#x4E8E;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002;</p>
<blockquote>
<ul>
<li><p>Catkin packages are not really components of catkin. Rather the components feature of CMake was utilized in the design of catkin to save you significant typing time.</p>
</li>
<li><p>For catkin packages, if you find<em>package them as components of catkin, this is advantageous as a single set of environment variables is created with the catkin</em> prefix.</p>
</li>
</ul>
</blockquote>
<ul>
<li>&#x6CE8;&#x610F;&#xFF1A;boost&#x4E0D;&#x662F;catkin&#x7EC4;&#x4EF6;&#x54E6;</li>
</ul>
<h4 id="catkin_package&#x601D;&#x60F3;"><a href="#catkin-package-&#x601D;&#x60F3;" class="headerlink" title="catkin_package()&#x601D;&#x60F3;"></a>catkin_package()&#x601D;&#x60F3;</h4><ul>
<li><p>&#x662F;&#x4E00;&#x4E2A;CMake &#x5B8F;&#xFF0C;&#x7528;&#x6765;&#x660E;&#x786E;catkin&#x6784;&#x5EFA;&#x7CFB;&#x7EDF;&#x4FE1;&#x606F;&#xFF0C;&#x8FD9;&#x4E9B;&#x4FE1;&#x606F;&#x7528;&#x6765;&#x751F;&#x6210;pkg-config&#x548C;CMake&#x6587;&#x4EF6;</p>
</li>
<li><blockquote>
<p><strong>This function must be called before declaring any targets with add_library() or add_executable()</strong>. The function has 5 optional arguments:</p>
</blockquote>
</li>
</ul>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">INCLUDE_DIRS - The exported <span class="keyword">include</span> paths (i.e. cflags) for the package</span><br><span class="line"></span><br><span class="line">LIBRARIES - The exported libraries from the <span class="keyword">project</span></span><br><span class="line"></span><br><span class="line">CATKIN_DEPENDS - Other catkin projects that this <span class="keyword">project</span> depends <span class="keyword">on</span></span><br><span class="line"></span><br><span class="line">DEPENDS - Non-catkin CMake projects that this <span class="keyword">project</span> depends <span class="keyword">on</span></span><br><span class="line"></span><br><span class="line">CFG_EXTRAS - Additional configuration options</span><br></pre></td></tr></table></figure>
<h4 id="&#x5173;&#x4E8E;&#x6807;&#x7684;&#x7684;&#x6784;&#x5EFA;&#x9009;&#x9879;"><a href="#&#x5173;&#x4E8E;&#x6807;&#x7684;&#x7684;&#x6784;&#x5EFA;&#x9009;&#x9879;" class="headerlink" title="&#x5173;&#x4E8E;&#x6807;&#x7684;&#x7684;&#x6784;&#x5EFA;&#x9009;&#x9879;"></a>&#x5173;&#x4E8E;&#x6807;&#x7684;&#x7684;&#x6784;&#x5EFA;&#x9009;&#x9879;</h4><ul>
<li>&#x81EA;&#x5B9A;&#x4E49;&#x8F93;&#x51FA;&#x76EE;&#x5F55;&#x3002;</li>
</ul>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">set_target_properties</span>(python_module_library  PROPERTIES LIBRARY_OUTPUT_DIRECTORY <span class="variable">${CATKIN_DEVEL_PREFIX}</span>/<span class="variable">${CATKIN_PACKAGE_PYTHON_DESTINATION}</span>)</span><br></pre></td></tr></table></figure>
<ul>
<li>&#x5305;&#x542B;&#x76EE;&#x5F55;&#x548C;&#x5E93;&#xFF0C;&#x521B;&#x5EFA;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x548C;&#x5E93;&#x6587;&#x4EF6;</li>
</ul>
<p><strong><em>&#x5B8C;&#x5168;&#x662F;CMake&#x77E5;&#x8BC6;</em></strong></p>
<h4 id="&#x6D88;&#x606F;&#x670D;&#x52A1;&#x548C;&#x52A8;&#x4F5C;"><a href="#&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#x548C;&#x52A8;&#x4F5C;" class="headerlink" title="&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#x548C;&#x52A8;&#x4F5C;"></a>&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#x548C;&#x52A8;&#x4F5C;</h4><ul>
<li>&#x4E00;&#x53E5;&#x8BDD;&#xFF0C;&#x5148;add_service_files()&#xFF0C;&#x518D;generate_messgaes()&#xFF0C;&#x53EF;&#x8C13;&#x662F;&#x4E00;&#x952E;&#x521B;&#x9020;&#x6D88;&#x606F;&#x670D;&#x52A1;&#x52A8;&#x4F5C;</li>
</ul>
<blockquote>
<p>Messages (.msg), services (.srv), and actions (.action) files in ROS require a special preprocessor build step before being built and used by ROS packages. The point of these macros is to generate programming language-specific files so that one can utilize messages, services, and actions in their programming language of choice. The build system will generate bindings using all available generators (e.g. gencpp, genpy, genlisp, etc).</p>
</blockquote>
<h5 id="&#x4E00;&#x7CFB;&#x5217;&#x6CE8;&#x610F;&#x4E8B;&#x9879;&#x61D2;&#x5F97;&#x7FFB;&#x8BD1;&#x4E86;"><a href="#&#x4E00;&#x7CFB;&#x5217;&#x6CE8;&#x610F;&#x4E8B;&#x9879;&#xFF08;&#x61D2;&#x5F97;&#x7FFB;&#x8BD1;&#x4E86;&#xFF09;" class="headerlink" title="&#x4E00;&#x7CFB;&#x5217;&#x6CE8;&#x610F;&#x4E8B;&#x9879;&#xFF08;&#x61D2;&#x5F97;&#x7FFB;&#x8BD1;&#x4E86;&#xFF09;"></a>&#x4E00;&#x7CFB;&#x5217;&#x6CE8;&#x610F;&#x4E8B;&#x9879;&#xFF08;&#x61D2;&#x5F97;&#x7FFB;&#x8BD1;&#x4E86;&#xFF09;</h5><blockquote>
<ul>
<li><p>These macros must come BEFORE the catkin_package() macro in order for generation to work correctly.</p>
</li>
<li><p>Your catkin_package() macro must have a CATKIN_DEPENDS dependency on message_runtime.</p>
</li>
<li><p>You must use find_package() for the package message_generation, either alone or as a component of catkin</p>
</li>
<li><p>Your package.xml file must contain a build dependency on message_generation and a runtime dependency on message_runtime. This is not necessary if the dependencies are pulled in transitively from other packages.</p>
</li>
<li><p>If you have a package which builds messages and/or services as well as executables that use them, you need to create an explicit dependency on the automatically-generated message target so that they are built in the correct order. (some_target is the name of the target set by add_executable()):</p>
</li>
</ul>
</blockquote>
<h4 id="&#x5355;&#x5143;&#x6D4B;&#x8BD5;"><a href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;" class="headerlink" title="&#x5355;&#x5143;&#x6D4B;&#x8BD5;"></a>&#x5355;&#x5143;&#x6D4B;&#x8BD5;</h4><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">catkin_add_gtest(myUnitTest test/utest.cpp)</span><br></pre></td></tr></table></figure>
<h4 id="&#x5B89;&#x88C5;&#x7565;"><a href="#&#x5B89;&#x88C5;&#xFF08;&#x7565;&#xFF09;" class="headerlink" title="&#x5B89;&#x88C5;&#xFF08;&#x7565;&#xFF09;"></a>&#x5B89;&#x88C5;&#xFF08;&#x7565;&#xFF09;</h4><h3 id="packagexml"><a href="#Package-xml" class="headerlink" title="Package.xml"></a><a href="http://wiki.ros.org/catkin/package.xml" target="_blank" rel="external">Package.xml</a></h3><h4 id="&#x4F7F;&#x7528;xml&#x8BED;&#x8A00;&#x8BBE;&#x7F6E;&#x4F9D;&#x8D56;&#x7565;"><a href="#&#x4F7F;&#x7528;XML&#x8BED;&#x8A00;&#x8BBE;&#x7F6E;&#x4F9D;&#x8D56;&#xFF08;&#x7565;&#xFF09;" class="headerlink" title="&#x4F7F;&#x7528;XML&#x8BED;&#x8A00;&#x8BBE;&#x7F6E;&#x4F9D;&#x8D56;&#xFF08;&#x7565;&#xFF09;"></a>&#x4F7F;&#x7528;XML&#x8BED;&#x8A00;&#x8BBE;&#x7F6E;&#x4F9D;&#x8D56;&#xFF08;&#x7565;&#xFF09;</h4><ul>
<li><p>&#x5B9E;&#x9645;&#x4E0A;&#x5C31;&#x662F;&#x4F7F;&#x7528;&#x6807;&#x8BB0;&#x8BED;&#x8A00;&#x8BF4;&#x660E;&#x672C;&#x5305;&#x7684;&#x57FA;&#x672C;&#x60C5;&#x51B5;</p>
</li>
<li><p>&#x8BBE;&#x7F6E;&#x672C;&#x5305;&#x4E3A;Metapackages</p>
</li>
</ul>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">export</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">metapackage</span> /&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">export</span>&gt;</span></span><br></pre></td></tr></table></figure>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">cmake_minimum_required</span>(VERSION <span class="number">2.8</span>.<span class="number">3</span>)</span><br><span class="line"><span class="keyword">project</span>(&lt;PACKAGE_NAME&gt;)</span><br><span class="line"><span class="keyword">find_package</span>(catkin REQUIRED)</span><br><span class="line">catkin_metapackage()</span><br></pre></td></tr></table></figure>
<h3 id="&#x4E13;&#x9898;&#x6D88;&#x606F;&#x670D;&#x52A1;&#x91CD;&#x914D;&#x7F6E;&#x7684;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;"><a href="#&#x4E13;&#x9898;&#xFF1A;&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#xFF0C;&#x91CD;&#x914D;&#x7F6E;&#x7684;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;" class="headerlink" title="&#x4E13;&#x9898;&#xFF1A;&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#xFF0C;&#x91CD;&#x914D;&#x7F6E;&#x7684;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;"></a>&#x4E13;&#x9898;&#xFF1A;&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#xFF0C;&#x91CD;&#x914D;&#x7F6E;&#x7684;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;</h3><ul>
<li>&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x5305;&#x6216;&#x8282;&#x70B9;&#x662F;&#x6D88;&#x606F;&#xFF0C;&#x670D;&#x52A1;&#xFF0C;&#x52A8;&#x4F5C;&#x7684;&#x63D0;&#x4F9B;&#x8005;&#x65F6;&#xFF0C;&#x5728;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;&#x4E2D;&#x624D;&#x9700;&#x8981;&#x6DFB;&#x52A0;&#x76F8;&#x5E94;&#x7684;&#x63CF;&#x8FF0;&#x8BED;&#x53E5;&#xFF0C;&#x5982;&#x679C;&#x662F;&#x63A5;&#x53D7;&#x8005;&#xFF0C;&#x90A3;&#x4E48;&#x4E0D;&#x9700;&#x8981;&#x63D0;&#x4F9B;&#x3002;</li>
</ul>
<blockquote>
<p>&#x8BF7;&#x6BD4;&#x8F83;rosaria&#x548C;rosaria_client&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;&#x7684;&#x533A;&#x522B;</p>
</blockquote>
<ul>
<li><p>&#x5F53;&#x9700;&#x8981;&#x4F7F;&#x7528;&#x5230;&#x65B0;&#x7684;&#x6D88;&#x606F;&#x548C;&#x670D;&#x52A1;&#x7C7B;&#x578B;&#x65F6;&#xFF0C;&#x624D;&#x9700;&#x8981;&#x518D;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;&#x4E2D;&#x6DFB;&#x52A0;add&#x8BED;&#x53E5;</p>
</li>
<li><p>&#x901A;&#x8FC7;&#x5305;&#x542B;&#x5176;&#x4ED6;&#x542B;&#x6709;std_msgs&#x7684;&#x5305;&#xFF0C;&#x5982;rosaria&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x95F4;&#x63A5;&#x5305;&#x542B;std_msgs</p>
</li>
<li><p>&#x561B;&#x7684;&#xFF0C;&#x5B98;&#x65B9;&#x4F8B;&#x7A0B;&#x5EFA;&#x7ACB;&#x6D88;&#x606F;&#x548C;&#x670D;&#x52A1;&#x90FD;&#x8FD8;&#x8981;</p>
</li>
</ul>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">add_dependencies</span>()</span><br></pre></td></tr></table></figure>
<p>&#x4F46;&#x662F;rosaria&#x4E2D;&#x6CA1;&#x6709;&#x8FD9;&#x4E48;&#x591A;&#x5E9F;&#x8BDD;</p>
<ul>
<li>&#x6D88;&#x606F;&#x548C;&#x670D;&#x52A1;&#x7684;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;</li>
</ul>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">find_package</span>(catkin REQUIRED COMPONENTS   roscpp   rospy   std_msgs   message_generation)</span><br><span class="line"></span><br><span class="line">catkin_package(  ...  CATKIN_DEPENDS message_runtime ...  ...)</span><br><span class="line"></span><br><span class="line">generate_messages(</span><br><span class="line"></span><br><span class="line"><span class="comment">#   DEPENDENCIES</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#   std_msgs</span></span><br><span class="line"></span><br><span class="line">)</span><br></pre></td></tr></table></figure>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">build_depend</span>&gt;</span>message_generation<span class="tag">&lt;/<span class="name">build_depend</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">run_depend</span>&gt;</span>message_runtime<span class="tag">&lt;/<span class="name">run_depend</span>&gt;</span></span><br></pre></td></tr></table></figure>
<ul>
<li>&#x4E3A;&#x4EC0;&#x4E48;&#x6709;</li>
</ul>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">add_msgs()</span><br></pre></td></tr></table></figure>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">add_srvs()</span><br></pre></td></tr></table></figure>
<p>&#x800C;&#x53EA;&#x6709;</p>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">generate_messages()</span><br></pre></td></tr></table></figure>
<p>&#x6CA1;&#x6709;</p>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">generate_srvs()</span><br></pre></td></tr></table></figure>
<p>&#x7B49;&#xFF1F;&#x56E0;&#x4E3A;&#x670D;&#x52A1;&#x548C;&#x53C2;&#x6570;&#x91CD;&#x914D;&#x7F6E;&#x672C;&#x8D28;&#x4E0A;&#x90FD;&#x662F;&#x57FA;&#x4E8E;msg&#x6D88;&#x606F;&#x673A;&#x5236;&#xFF0C;&#x591A;&#x8BF4;&#x4E00;&#x53E5;&#xFF0C;&#x6D88;&#x606F;&#x673A;&#x5236;&#x662F;&#x5EFA;&#x7ACB;&#x5728;XMLRPC&#x8FDC;&#x7A0B;&#x8FC7;&#x7A0B;&#x8C03;&#x7528;&#x673A;&#x5236;&#x4E0A;&#x7684;&#xFF0C;&#x8FDB;&#x800C;&#x5EFA;&#x7ACB;&#x5728;TCP/IP&#x7F51;&#x7EDC;&#x534F;&#x8BAE;&#x4E0A;</p>
<blockquote>
<p>&#x300A;UNIX&#x7F51;&#x7EDC;&#x7F16;&#x7A0B;&#xFF1A;&#x8FDB;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#x300B;<br><a href="http://wiki.ros.org/dynamic_reconfigure/Tutorials/SettingUpDynamicReconfigureForANode" target="_blank" rel="external">&#x91CD;&#x914D;&#x7F6E;&#x7684;&#x6784;&#x9020;&#x63CF;&#x8FF0;&#x6587;&#x4EF6;</a></p>
</blockquote>
<h3 id="&#x5B9E;&#x4F8B;&#x89E3;&#x51B3;zsdoor&#x6A21;&#x5757;&#x7F3A;&#x5931;&#x95EE;&#x9898;"><a href="#&#x5B9E;&#x4F8B;&#xFF1A;&#x89E3;&#x51B3;zsDoor&#x6A21;&#x5757;&#x7F3A;&#x5931;&#x95EE;&#x9898;" class="headerlink" title="&#x5B9E;&#x4F8B;&#xFF1A;&#x89E3;&#x51B3;zsDoor&#x6A21;&#x5757;&#x7F3A;&#x5931;&#x95EE;&#x9898;"></a>&#x5B9E;&#x4F8B;&#xFF1A;&#x89E3;&#x51B3;zsDoor&#x6A21;&#x5757;&#x7F3A;&#x5931;&#x95EE;&#x9898;</h3><h4 id="&#x67E5;&#x770B;stereo_wall_detection&#x7684;cmakeliststxt"><a href="#&#x67E5;&#x770B;stereo-wall-detection&#x7684;CMakeLists-txt" class="headerlink" title="&#x67E5;&#x770B;stereo_wall_detection&#x7684;CMakeLists.txt"></a>&#x67E5;&#x770B;stereo_wall_detection&#x7684;CMakeLists.txt</h4>
      

      
        <div class="page-reward">
          <a href="javascript:;" class="page-reward-btn tooltip-top">
            <div class="tooltip tooltip-east">
            <span class="tooltip-item">
              赏
            </span>
            <span class="tooltip-content">
              <span class="tooltip-text">
                <span class="tooltip-inner">
                  <p class="reward-p"><i class="icon icon-quo-left"></i>谢谢你请我吃糖果<i class="icon icon-quo-right"></i></p>
                  <div class="reward-box">
                    
                    <div class="reward-box-item">
                      <img class="reward-img" src="http://7xvunf.com1.z0.glb.clouddn.com/alipay.jpg">
                      <span class="reward-type">支付宝</span>
                    </div>
                    
                    
                    <div class="reward-box-item">
                      <img class="reward-img" src="http://7xvunf.com1.z0.glb.clouddn.com/wechatpay.jpg">
                      <span class="reward-type">微信</span>
                    </div>
                    
                  </div>
                </span>
              </span>
            </span>
          </div>
          </a>
        </div>
      
    </div>
    <div class="article-info article-info-index">
      
      
	<div class="article-tag tagcloud">
		<i class="icon-price-tags"></i>
		<ul class="article-tag-list">
			 
        <li class="article-tag-list-item">
        	<a href="javascript:void(0)" class="article-tag-list-link color3">机器人软件构造</a>
        </li>
       
        <li class="article-tag-list-item">
        	<a href="javascript:void(0)" class="article-tag-list-link color4">机器人</a>
        </li>
       
        <li class="article-tag-list-item">
        	<a href="javascript:void(0)" class="article-tag-list-link color4">ROS</a>
        </li>
       
        <li class="article-tag-list-item">
        	<a href="javascript:void(0)" class="article-tag-list-link color3">编译</a>
        </li>
      
		</ul>
	</div>

      

      

      
        
<div class="share-btn share-icons tooltip-left">
  <div class="tooltip tooltip-east">
    <span class="tooltip-item">
      <a href="javascript:;" class="share-sns share-outer">
        <i class="icon icon-share"></i>
      </a>
    </span>
    <span class="tooltip-content">
      <div class="share-wrap">
        <div class="share-icons">
          <a class="weibo share-sns" href="javascript:;" data-type="weibo">
            <i class="icon icon-weibo"></i>
          </a>
          <a class="weixin share-sns wxFab" href="javascript:;" data-type="weixin">
            <i class="icon icon-weixin"></i>
          </a>
          <a class="qq share-sns" href="javascript:;" data-type="qq">
            <i class="icon icon-qq"></i>
          </a>
          <a class="douban share-sns" href="javascript:;" data-type="douban">
            <i class="icon icon-douban"></i>
          </a>
          <a class="qzone share-sns" href="javascript:;" data-type="qzone">
            <i class="icon icon-qzone"></i>
          </a>
          <a class="facebook share-sns" href="javascript:;" data-type="facebook">
            <i class="icon icon-facebook"></i>
          </a>
          <a class="twitter share-sns" href="javascript:;" data-type="twitter">
            <i class="icon icon-twitter"></i>
          </a>
          <a class="google share-sns" href="javascript:;" data-type="google">
            <i class="icon icon-google"></i>
          </a>
        </div>
      </div>
    </span>
  </div>
</div>

<div class="page-modal wx-share js-wx-box">
    <a class="close js-modal-close" href="javascript:;"><i class="icon icon-close"></i></a>
    <p>扫一扫，分享到微信</p>
    <div class="wx-qrcode">
      <img src="http://s.jiathis.com/qrcode.php?url=https://ZhenshengLee.github.io/2016/08/16/160816-catkin-build-system/" alt="微信分享二维码">
    </div>
</div>

<div class="mask js-mask"></div>
      
      <div class="clearfix"></div>
    </div>
  </div>
</article>

  
<nav id="article-nav">
  
    <a href="/2016/08/16/160816-vi-command/" id="article-nav-newer" class="article-nav-link-wrap">
      <i class="icon-circle-left"></i>
      <div class="article-nav-title">
        
          vi command
        
      </div>
    </a>
  
  
    <a href="/2016/08/16/160816-gtest-and-rostest/" id="article-nav-older" class="article-nav-link-wrap">
      <div class="article-nav-title">gtest and rostest</div>
      <i class="icon-circle-right"></i>
    </a>
  
</nav>






  
  <div class="duoshuo">
	<!-- 多说评论框 start -->
	<div class="ds-thread" data-thread-key="160816-catkin-build-system" data-title="catkin build system" data-url="https://ZhenshengLee.github.io/2016/08/16/160816-catkin-build-system/"></div>
	<!-- 多说评论框 end -->
	<!-- 多说公共JS代码 start (一个网页只需插入一次) -->
	<script type="text/javascript">
	var duoshuoQuery = {short_name:"true"};
	(function() {
		var ds = document.createElement('script');
		ds.type = 'text/javascript';ds.async = true;
		ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js';
		ds.charset = 'UTF-8';
		(document.getElementsByTagName('head')[0] 
		 || document.getElementsByTagName('body')[0]).appendChild(ds);
	})();
	</script>
	<!-- 多说公共JS代码 end -->
</div>

  




          </div>
        </div>
      </div>
      <footer id="footer">
  <div class="outer">
    <div id="footer-info">
    	<div class="footer-left">
    		&copy; 2017 黎振胜
    	</div>
      	<div class="footer-right">
      		<a href="http://hexo.io/" target="_blank">Hexo</a>  Theme <a href="https://github.com/litten/hexo-theme-yilia" target="_blank">Yilia</a> by Litten
      	</div>
    </div>
  </div>
</footer>
    </div>
    <script>
	var yiliaConfig = {
		mathjax: true,
		isHome: false,
		isPost: true,
		isArchive: false,
		isTag: false,
		isCategory: false,
		open_in_new: false,
		root: "/",
		innerArchive: true,
		showTags: false
	}
</script>

<script>
!function(t){function n(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var e={};return n.m=t,n.c=e,n.p="/",n(0)}([function(t,n,e){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,n){var e=/\/|index.html/g;return t.replace(e,"")===n.replace(e,"")}function i(){for(var t=document.querySelectorAll(".js-header-menu li a"),n=window.location.pathname,e=0,r=t.length;e<r;e++){var i=t[e];o(n,i.getAttribute("href"))&&(0,d.default)(i,"active")}}function u(t){for(var n=t.offsetLeft,e=t.offsetParent;null!==e;)n+=e.offsetLeft,e=e.offsetParent;return n}function f(t){for(var n=t.offsetTop,e=t.offsetParent;null!==e;)n+=e.offsetTop,e=e.offsetParent;return n}function c(t,n,e,r,o){var i=u(t),c=f(t)-n;if(c-e<=o){var a=t.$newDom;a||(a=t.cloneNode(!0),(0,h.default)(t,a),t.$newDom=a,a.style.position="fixed",a.style.top=(e||c)+"px",a.style.left=i+"px",a.style.zIndex=r||2,a.style.width="100%",a.style.color="#fff"),a.style.visibility="visible",t.style.visibility="hidden"}else{t.style.visibility="visible";var s=t.$newDom;s&&(s.style.visibility="hidden")}}function a(){var t=document.querySelector(".js-overlay"),n=document.querySelector(".js-header-menu");c(t,document.body.scrollTop,-63,2,0),c(n,document.body.scrollTop,1,3,0)}function s(){document.querySelector("#container").addEventListener("scroll",function(t){a()}),window.addEventListener("scroll",function(t){a()}),a()}function l(){x.default.versions.mobile&&window.screen.width<800&&(i(),s())}var p=e(71),d=r(p),v=e(72),y=(r(v),e(84)),h=r(y),b=e(69),x=r(b),m=e(75),g=r(m),w=e(70);l(),(0,w.addLoadEvent)(function(){g.default.init()}),t.exports={}},function(t,n){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},function(t,n,e){var r=e(49),o=e(15);t.exports=function(t){return r(o(t))}},function(t,n,e){t.exports=!e(8)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,n,e){var r=e(6),o=e(12);t.exports=e(4)?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},function(t,n,e){var r=e(10),o=e(30),i=e(24),u=Object.defineProperty;n.f=e(4)?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return u(t,n,e)}catch(t){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},function(t,n,e){var r=e(22)("wks"),o=e(13),i=e(1).Symbol,u="function"==typeof i,f=t.exports=function(t){return r[t]||(r[t]=u&&i[t]||(u?i:o)("Symbol."+t))};f.store=r},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n,e){var r=e(35),o=e(16);t.exports=Object.keys||function(t){return r(t,o)}},function(t,n,e){var r=e(11);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n){var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},function(t,n){var e=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=e)},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},function(t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,n){t.exports={}},function(t,n){t.exports=!0},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,e){var r=e(6).f,o=e(2),i=e(7)("toStringTag");t.exports=function(t,n,e){t&&!o(t=e?t:t.prototype,i)&&r(t,i,{configurable:!0,value:n})}},function(t,n,e){var r=e(22)("keys"),o=e(13);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,n,e){var r=e(1),o="__core-js_shared__",i=r[o]||(r[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,n){var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},function(t,n,e){var r=e(11);t.exports=function(t,n){if(!r(t))return t;var e,o;if(n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;if("function"==typeof(e=t.valueOf)&&!r(o=e.call(t)))return o;if(!n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,n,e){var r=e(1),o=e(14),i=e(18),u=e(26),f=e(6).f;t.exports=function(t){var n=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==t.charAt(0)||t in n||f(n,t,{value:u.f(t)})}},function(t,n,e){n.f=e(7)},function(t,n,e){var r=e(1),o=e(14),i=e(46),u=e(5),f="prototype",c=function(t,n,e){var a,s,l,p=t&c.F,d=t&c.G,v=t&c.S,y=t&c.P,h=t&c.B,b=t&c.W,x=d?o:o[n]||(o[n]={}),m=x[f],g=d?r:v?r[n]:(r[n]||{})[f];d&&(e=n);for(a in e)s=!p&&g&&void 0!==g[a],s&&a in x||(l=s?g[a]:e[a],x[a]=d&&"function"!=typeof g[a]?e[a]:h&&s?i(l,r):b&&g[a]==l?function(t){var n=function(n,e,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,e)}return new t(n,e,r)}return t.apply(this,arguments)};return n[f]=t[f],n}(l):y&&"function"==typeof l?i(Function.call,l):l,y&&((x.virtual||(x.virtual={}))[a]=l,t&c.R&&m&&!m[a]&&u(m,a,l)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,n){var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},function(t,n,e){var r=e(11),o=e(1).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,n,e){t.exports=!e(4)&&!e(8)(function(){return 7!=Object.defineProperty(e(29)("div"),"a",{get:function(){return 7}}).a})},function(t,n,e){"use strict";var r=e(18),o=e(27),i=e(36),u=e(5),f=e(2),c=e(17),a=e(51),s=e(20),l=e(58),p=e(7)("iterator"),d=!([].keys&&"next"in[].keys()),v="@@iterator",y="keys",h="values",b=function(){return this};t.exports=function(t,n,e,x,m,g,w){a(e,n,x);var O,S,_,j=function(t){if(!d&&t in A)return A[t];switch(t){case y:return function(){return new e(this,t)};case h:return function(){return new e(this,t)}}return function(){return new e(this,t)}},P=n+" Iterator",E=m==h,M=!1,A=t.prototype,T=A[p]||A[v]||m&&A[m],L=T||j(m),N=m?E?j("entries"):L:void 0,C="Array"==n?A.entries||T:T;if(C&&(_=l(C.call(new t)),_!==Object.prototype&&(s(_,P,!0),r||f(_,p)||u(_,p,b))),E&&T&&T.name!==h&&(M=!0,L=function(){return T.call(this)}),r&&!w||!d&&!M&&A[p]||u(A,p,L),c[n]=L,c[P]=b,m)if(O={values:E?L:j(h),keys:g?L:j(y),entries:N},w)for(S in O)S in A||i(A,S,O[S]);else o(o.P+o.F*(d||M),n,O);return O}},function(t,n,e){var r=e(10),o=e(55),i=e(16),u=e(21)("IE_PROTO"),f=function(){},c="prototype",a=function(){var t,n=e(29)("iframe"),r=i.length,o="<",u=">";for(n.style.display="none",e(48).appendChild(n),n.src="javascript:",t=n.contentWindow.document,t.open(),t.write(o+"script"+u+"document.F=Object"+o+"/script"+u),t.close(),a=t.F;r--;)delete a[c][i[r]];return a()};t.exports=Object.create||function(t,n){var e;return null!==t?(f[c]=r(t),e=new f,f[c]=null,e[u]=t):e=a(),void 0===n?e:o(e,n)}},function(t,n,e){var r=e(35),o=e(16).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n,e){var r=e(2),o=e(3),i=e(45)(!1),u=e(21)("IE_PROTO");t.exports=function(t,n){var e,f=o(t),c=0,a=[];for(e in f)e!=u&&r(f,e)&&a.push(e);for(;n.length>c;)r(f,e=n[c++])&&(~i(a,e)||a.push(e));return a}},function(t,n,e){t.exports=e(5)},function(t,n,e){var r=e(15);t.exports=function(t){return Object(r(t))}},function(t,n,e){t.exports={default:e(41),__esModule:!0}},function(t,n,e){t.exports={default:e(42),__esModule:!0}},function(t,n,e){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var o=e(39),i=r(o),u=e(38),f=r(u),c="function"==typeof f.default&&"symbol"==typeof i.default?function(t){return typeof t}:function(t){return t&&"function"==typeof f.default&&t.constructor===f.default&&t!==f.default.prototype?"symbol":typeof t};n.default="function"==typeof f.default&&"symbol"===c(i.default)?function(t){return"undefined"==typeof t?"undefined":c(t)}:function(t){return t&&"function"==typeof f.default&&t.constructor===f.default&&t!==f.default.prototype?"symbol":"undefined"==typeof t?"undefined":c(t)}},function(t,n,e){e(65),e(63),e(66),e(67),t.exports=e(14).Symbol},function(t,n,e){e(64),e(68),t.exports=e(26).f("iterator")},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n){t.exports=function(){}},function(t,n,e){var r=e(3),o=e(61),i=e(60);t.exports=function(t){return function(n,e,u){var f,c=r(n),a=o(c.length),s=i(u,a);if(t&&e!=e){for(;a>s;)if(f=c[s++],f!=f)return!0}else for(;a>s;s++)if((t||s in c)&&c[s]===e)return t||s||0;return!t&&-1}}},function(t,n,e){var r=e(43);t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},function(t,n,e){var r=e(9),o=e(34),i=e(19);t.exports=function(t){var n=r(t),e=o.f;if(e)for(var u,f=e(t),c=i.f,a=0;f.length>a;)c.call(t,u=f[a++])&&n.push(u);return n}},function(t,n,e){t.exports=e(1).document&&document.documentElement},function(t,n,e){var r=e(28);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,n,e){var r=e(28);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,n,e){"use strict";var r=e(32),o=e(12),i=e(20),u={};e(5)(u,e(7)("iterator"),function(){return this}),t.exports=function(t,n,e){t.prototype=r(u,{next:o(1,e)}),i(t,n+" Iterator")}},function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},function(t,n,e){var r=e(9),o=e(3);t.exports=function(t,n){for(var e,i=o(t),u=r(i),f=u.length,c=0;f>c;)if(i[e=u[c++]]===n)return e}},function(t,n,e){var r=e(13)("meta"),o=e(11),i=e(2),u=e(6).f,f=0,c=Object.isExtensible||function(){return!0},a=!e(8)(function(){return c(Object.preventExtensions({}))}),s=function(t){u(t,r,{value:{i:"O"+ ++f,w:{}}})},l=function(t,n){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,r)){if(!c(t))return"F";if(!n)return"E";s(t)}return t[r].i},p=function(t,n){if(!i(t,r)){if(!c(t))return!0;if(!n)return!1;s(t)}return t[r].w},d=function(t){return a&&v.NEED&&c(t)&&!i(t,r)&&s(t),t},v=t.exports={KEY:r,NEED:!1,fastKey:l,getWeak:p,onFreeze:d}},function(t,n,e){var r=e(6),o=e(10),i=e(9);t.exports=e(4)?Object.defineProperties:function(t,n){o(t);for(var e,u=i(n),f=u.length,c=0;f>c;)r.f(t,e=u[c++],n[e]);return t}},function(t,n,e){var r=e(19),o=e(12),i=e(3),u=e(24),f=e(2),c=e(30),a=Object.getOwnPropertyDescriptor;n.f=e(4)?a:function(t,n){if(t=i(t),n=u(n,!0),c)try{return a(t,n)}catch(t){}if(f(t,n))return o(!r.f.call(t,n),t[n])}},function(t,n,e){var r=e(3),o=e(33).f,i={}.toString,u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],f=function(t){try{return o(t)}catch(t){return u.slice()}};t.exports.f=function(t){return u&&"[object Window]"==i.call(t)?f(t):o(r(t))}},function(t,n,e){var r=e(2),o=e(37),i=e(21)("IE_PROTO"),u=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},function(t,n,e){var r=e(23),o=e(15);t.exports=function(t){return function(n,e){var i,u,f=String(o(n)),c=r(e),a=f.length;return c<0||c>=a?t?"":void 0:(i=f.charCodeAt(c),i<55296||i>56319||c+1===a||(u=f.charCodeAt(c+1))<56320||u>57343?t?f.charAt(c):i:t?f.slice(c,c+2):(i-55296<<10)+(u-56320)+65536)}}},function(t,n,e){var r=e(23),o=Math.max,i=Math.min;t.exports=function(t,n){return t=r(t),t<0?o(t+n,0):i(t,n)}},function(t,n,e){var r=e(23),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,n,e){"use strict";var r=e(44),o=e(52),i=e(17),u=e(3);t.exports=e(31)(Array,"Array",function(t,n){this._t=u(t),this._i=0,this._k=n},function(){var t=this._t,n=this._k,e=this._i++;return!t||e>=t.length?(this._t=void 0,o(1)):"keys"==n?o(0,e):"values"==n?o(0,t[e]):o(0,[e,t[e]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(t,n){},function(t,n,e){"use strict";var r=e(59)(!0);e(31)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,n=this._t,e=this._i;return e>=n.length?{value:void 0,done:!0}:(t=r(n,e),this._i+=t.length,{value:t,done:!1})})},function(t,n,e){"use strict";var r=e(1),o=e(2),i=e(4),u=e(27),f=e(36),c=e(54).KEY,a=e(8),s=e(22),l=e(20),p=e(13),d=e(7),v=e(26),y=e(25),h=e(53),b=e(47),x=e(50),m=e(10),g=e(3),w=e(24),O=e(12),S=e(32),_=e(57),j=e(56),P=e(6),E=e(9),M=j.f,A=P.f,T=_.f,L=r.Symbol,N=r.JSON,C=N&&N.stringify,k="prototype",F=d("_hidden"),q=d("toPrimitive"),I={}.propertyIsEnumerable,B=s("symbol-registry"),D=s("symbols"),W=s("op-symbols"),H=Object[k],K="function"==typeof L,R=r.QObject,J=!R||!R[k]||!R[k].findChild,U=i&&a(function(){return 7!=S(A({},"a",{get:function(){return A(this,"a",{value:7}).a}})).a})?function(t,n,e){var r=M(H,n);r&&delete H[n],A(t,n,e),r&&t!==H&&A(H,n,r)}:A,G=function(t){var n=D[t]=S(L[k]);return n._k=t,n},$=K&&"symbol"==typeof L.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof L},z=function(t,n,e){return t===H&&z(W,n,e),m(t),n=w(n,!0),m(e),o(D,n)?(e.enumerable?(o(t,F)&&t[F][n]&&(t[F][n]=!1),e=S(e,{enumerable:O(0,!1)})):(o(t,F)||A(t,F,O(1,{})),t[F][n]=!0),U(t,n,e)):A(t,n,e)},Y=function(t,n){m(t);for(var e,r=b(n=g(n)),o=0,i=r.length;i>o;)z(t,e=r[o++],n[e]);return t},Q=function(t,n){return void 0===n?S(t):Y(S(t),n)},X=function(t){var n=I.call(this,t=w(t,!0));return!(this===H&&o(D,t)&&!o(W,t))&&(!(n||!o(this,t)||!o(D,t)||o(this,F)&&this[F][t])||n)},V=function(t,n){if(t=g(t),n=w(n,!0),t!==H||!o(D,n)||o(W,n)){var e=M(t,n);return!e||!o(D,n)||o(t,F)&&t[F][n]||(e.enumerable=!0),e}},Z=function(t){for(var n,e=T(g(t)),r=[],i=0;e.length>i;)o(D,n=e[i++])||n==F||n==c||r.push(n);return r},tt=function(t){for(var n,e=t===H,r=T(e?W:g(t)),i=[],u=0;r.length>u;)!o(D,n=r[u++])||e&&!o(H,n)||i.push(D[n]);return i};K||(L=function(){if(this instanceof L)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),n=function(e){this===H&&n.call(W,e),o(this,F)&&o(this[F],t)&&(this[F][t]=!1),U(this,t,O(1,e))};return i&&J&&U(H,t,{configurable:!0,set:n}),G(t)},f(L[k],"toString",function(){return this._k}),j.f=V,P.f=z,e(33).f=_.f=Z,e(19).f=X,e(34).f=tt,i&&!e(18)&&f(H,"propertyIsEnumerable",X,!0),v.f=function(t){return G(d(t))}),u(u.G+u.W+u.F*!K,{Symbol:L});for(var nt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),et=0;nt.length>et;)d(nt[et++]);for(var nt=E(d.store),et=0;nt.length>et;)y(nt[et++]);u(u.S+u.F*!K,"Symbol",{for:function(t){return o(B,t+="")?B[t]:B[t]=L(t)},keyFor:function(t){if($(t))return h(B,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){J=!0},useSimple:function(){J=!1}}),u(u.S+u.F*!K,"Object",{create:Q,defineProperty:z,defineProperties:Y,getOwnPropertyDescriptor:V,getOwnPropertyNames:Z,getOwnPropertySymbols:tt}),N&&u(u.S+u.F*(!K||a(function(){var t=L();return"[null]"!=C([t])||"{}"!=C({a:t})||"{}"!=C(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!$(t)){for(var n,e,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);return n=r[1],"function"==typeof n&&(e=n),!e&&x(n)||(n=function(t,n){if(e&&(n=e.call(this,t,n)),!$(n))return n}),r[1]=n,C.apply(N,r)}}}),L[k][q]||e(5)(L[k],q,L[k].valueOf),l(L,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},function(t,n,e){e(25)("asyncIterator")},function(t,n,e){e(25)("observable")},function(t,n,e){e(62);for(var r=e(1),o=e(5),i=e(17),u=e(7)("toStringTag"),f=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],c=0;c<5;c++){var a=f[c],s=r[a],l=s&&s.prototype;l&&!l[u]&&o(l,u,a),i[a]=i.Array}},function(t,n){"use strict";var e={versions:function(){var t=window.navigator.userAgent;return{trident:t.indexOf("Trident")>-1,presto:t.indexOf("Presto")>-1,webKit:t.indexOf("AppleWebKit")>-1,gecko:t.indexOf("Gecko")>-1&&t.indexOf("KHTML")==-1,mobile:!!t.match(/AppleWebKit.*Mobile.*/),ios:!!t.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),android:t.indexOf("Android")>-1||t.indexOf("Linux")>-1,iPhone:t.indexOf("iPhone")>-1||t.indexOf("Mac")>-1,iPad:t.indexOf("iPad")>-1,webApp:t.indexOf("Safari")==-1,weixin:t.indexOf("MicroMessenger")==-1}}()};t.exports=e},function(t,n,e){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var o=e(40),i=r(o),u=function(){function t(t,n,e){return n||e?String.fromCharCode(n||e):o[t]||t}function n(t){return l[t]}var e=/&quot;|&lt;|&gt;|&amp;|&nbsp;|&apos;|&#(\d+);|&#(\d+)/g,r=/['<> "&]/g,o={"&quot;":'"',"&lt;":"<","&gt;":">","&amp;":"&","&nbsp;":" "},f=/\u00a0/g,c=/<br\s*\/?>/gi,a=/\r?\n/g,s=/\s/g,l={};for(var p in o)l[o[p]]=p;return o["&apos;"]="'",l["'"]="&#39;",{encode:function(t){return t?(""+t).replace(r,n).replace(a,"<br/>").replace(s,"&nbsp;"):""},decode:function(n){return n?(""+n).replace(c,"\n").replace(e,t).replace(f," "):""},encodeBase16:function(t){if(!t)return t;t+="";for(var n=[],e=0,r=t.length;r>e;e++)n.push(t.charCodeAt(e).toString(16).toUpperCase());return n.join("")},encodeBase16forJSON:function(t){if(!t)return t;t=t.replace(/[\u4E00-\u9FBF]/gi,function(t){return escape(t).replace("%u","\\u")});for(var n=[],e=0,r=t.length;r>e;e++)n.push(t.charCodeAt(e).toString(16).toUpperCase());return n.join("")},decodeBase16:function(t){if(!t)return t;t+="";for(var n=[],e=0,r=t.length;r>e;e+=2)n.push(String.fromCharCode("0x"+t.slice(e,e+2)));return n.join("")},encodeObject:function(t){if(t instanceof Array)for(var n=0,e=t.length;e>n;n++)t[n]=u.encodeObject(t[n]);else if("object"==("undefined"==typeof t?"undefined":(0,i.default)(t)))for(var r in t)t[r]=u.encodeObject(t[r]);else if("string"==typeof t)return u.encode(t);return t},loadScript:function(t){var n=document.createElement("script");document.getElementsByTagName("body")[0].appendChild(n),n.setAttribute("src",t)},addLoadEvent:function(t){var n=window.onload;"function"!=typeof window.onload?window.onload=t:window.onload=function(){n(),t()}}}}();t.exports=u},function(t,n){function e(t,n){t.classList?t.classList.add(n):t.className+=" "+n}t.exports=e},function(t,n){function e(t,n){if(t.classList)t.classList.remove(n);else{var e=new RegExp("(^|\\b)"+n.split(" ").join("|")+"(\\b|$)","gi");t.className=t.className.replace(e," ")}}t.exports=e},,,function(t,n){"use strict";function e(){var t=document.querySelector("#page-nav");if(t&&!document.querySelector("#page-nav .extend.prev")&&(t.innerHTML='<a class="extend prev disabled" rel="prev">&laquo; Prev</a>'+t.innerHTML),t&&!document.querySelector("#page-nav .extend.next")&&(t.innerHTML=t.innerHTML+'<a class="extend next disabled" rel="next">Next &raquo;</a>'),yiliaConfig&&yiliaConfig.open_in_new){var n=document.querySelectorAll(".article-entry a:not(.article-more-a)");n.forEach(function(t){t.setAttribute("target","_blank")})}var e=document.querySelector("#js-aboutme");e&&0!==e.length&&(e.innerHTML=e.innerText)}t.exports={init:e}},,,,,,,,,function(t,n){function e(t,n){if("string"==typeof n)return t.insertAdjacentHTML("afterend",n);var e=t.nextSibling;return e?t.parentNode.insertBefore(n,e):t.parentNode.appendChild(n)}t.exports=e}]);
</script>
<script src="/main.68ab53.js"></script>
<script>
(function() {
	var loadScript = function(path) {
	    var $script = document.createElement('script')
	    document.getElementsByTagName('body')[0].appendChild($script)
	    $script.setAttribute('src', path)
	}
	loadScript("/slider.fa3fc2.js")
})();
</script>




<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"]  ],
        processEscapes: true,
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
    }
});

MathJax.Hub.Queue(function() {
    var all = MathJax.Hub.getAllJax(), i;
    for(i=0; i < all.length; i += 1) {
        all[i].SourceElement().parentNode.className += ' has-jax';                 
    }       
});
</script>

<script src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>


    
<div class="tools-col" q-class="show:isShow,hide:isShow|isFalse" q-on="click:stop(e)">
  <div class="tools-nav header-menu">
    
    
      
      
      
    
      
    
      
      
      
    
    

    <ul style="width: 70%">
    
    
      
      <li style="width: 50%" q-on="click: openSlider(e, 'innerArchive')"><a href="javascript:void(0)" q-class="active:innerArchive">所有文章</a></li>
      
        
      
        
      
      <li style="width: 50%" q-on="click: openSlider(e, 'aboutme')"><a href="javascript:void(0)" q-class="active:aboutme">关于我</a></li>
      
        
    </ul>
  </div>
  <div class="tools-wrap">
    
    	<section class="tools-section tools-section-all" q-show="innerArchive">
        <div class="search-wrap">
          <input class="search-ipt" q-model="search" type="text" placeholder="find something…">
          <i class="icon-search icon" q-show="search|isEmptyStr"></i>
          <i class="icon-close icon" q-show="search|isNotEmptyStr" q-on="click:clearChose(e)"></i>
        </div>
        <div class="widget tagcloud search-tag">
          <p class="search-tag-wording">tag:</p>
          <label class="search-switch">
            <input type="checkbox" q-on="click:toggleTag(e)" q-attr="checked:showTags">
          </label>
          <ul class="article-tag-list" q-show="showTags">
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">机器人软件构造</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color4">机器人</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">部署</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color4">git</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">其他</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">建站</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color2">Ubuntu</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">机器人软件设计</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">论文</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color4">ROS</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">编译</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">调试</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">机器人系统开发</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color4">编辑器</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">组件</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color5">ompl</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color5">深度学习</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color1">caffe</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color4">卷首语</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color3">整机</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color2">库</a>
              </li>
             
              <li class="article-tag-list-item">
                <a href="javascript:void(0)" class="color5">建模文档</a>
              </li>
            
            <div class="clearfix"></div>
          </ul>
        </div>
        <ul class="search-ul">
          <p q-show="jsonFail" style="padding: 20px; font-size: 12px;">
            缺失模块。<br/>1、在博客根目录（注意不是yilia根目录）执行以下命令：<br/> npm i hexo-generator-json-content --save<br/><br/>
            2、在根目录_config.yml里添加配置：
<pre style="font-size: 12px;" q-show="jsonFail">
  jsonContent:
    meta: false
    pages: false
    posts:
      title: true
      date: true
      path: true
      text: true
      raw: false
      content: false
      slug: false
      updated: false
      comments: false
      link: false
      permalink: false
      excerpt: false
      categories: false
      tags: true
</pre>
          </p>
          <li class="search-li" q-repeat="items" q-show="isShow">
            <a q-attr="href:path|urlformat" class="search-title"><i class="icon-quo-left icon"></i><span q-text="title"></span></a>
            <p class="search-time">
              <i class="icon-calendar icon"></i>
              <span q-text="date|dateformat"></span>
            </p>
            <p class="search-tag">
              <i class="icon-price-tags icon"></i>
              <span q-repeat="tags" q-on="click:choseTag(e, name)" q-text="name|tagformat"></span>
            </p>
          </li>
        </ul>
    	</section>
    

    

    
    	<section class="tools-section tools-section-me" q-show="aboutme">
  	  	
  	  		<div class="aboutme-wrap" id="js-aboutme">本科学机械，硕士程序员，读书在中南，工作在中兴。</div>
  	  	
    	</section>
    
  </div>
  
</div>
    <!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

    <!-- Background of PhotoSwipe. 
         It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>

    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">

        <!-- Container that holds slides. 
            PhotoSwipe keeps only 3 of them in the DOM to save memory.
            Don't modify these 3 pswp__item elements, data is added later on. -->
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>

        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
        <div class="pswp__ui pswp__ui--hidden">

            <div class="pswp__top-bar">

                <!--  Controls are self-explanatory. Order can be changed. -->

                <div class="pswp__counter"></div>

                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>

                <button class="pswp__button pswp__button--share" style="display:none" title="Share"></button>

                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>

                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>

                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                      <div class="pswp__preloader__cut">
                        <div class="pswp__preloader__donut"></div>
                      </div>
                    </div>
                </div>
            </div>

            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div> 
            </div>

            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>

            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>

            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>

        </div>

    </div>

</div>
  </div>
</body>
</html>